package aspectJ;

import pack.Transeunte;

public aspect Principal {
	// *
	public pointcut primeiro() :  call (public static String search(String));

	after() : primeiro() {
		System.out.println("call (public static String search(String))");
	}

	public pointcut segundo() :  call (*.Handler.new());

	after() : segundo() {
		System.out
				.println("call (Handler.new(..): Detectado instancia do objeto");
	}		

	public pointcut terceiro() :  call (public void *.Handler.listen());

	before() : terceiro() {
		System.out.println("public void listen(): Servidor escutando porta.");
	}

	public pointcut quinto() : call (public void *.Handler.setClient(Socket));

	after() : quinto() {
		System.out
				.println("Before call public void Handler.setClient(Socket): Servidor aceitou uma conexao.");
	}

	public pointcut sexto() : call (* *.Network.*(..));

	before() : sexto() {
		System.out.println("Pointcut na chamada de: call (* Network.*(..));");
	}

	//qualquer metodo q retorne um int e comece com a letra g
	public pointcut setimo() : call (int *.g*(..));

	before() : setimo(){
		System.out.println("call (int *.g*());");
	}
//	qualquer metodo que receba um socket
	public pointcut oitavo() : call (* *.*(Socket));

	before() : oitavo(){
		System.out.println("pointcut na chamada de: call (* *.*(Socket));");
	}

	//captura a execucao do metodo run de transeunte
	before(Transeunte t) : execution(public void Transeunte.run()) && target(t){
		System.out.println("Transeunte.run(): " + t.getName());
	}

	// pointcut decimo11() : call(String Ap.getNome());
	// String around() : decimo11(){
	// String s = proceed();
	// String st = s.toUpperCase();
	// return st;
	// }

	//
	// pointcut decimo1() : call(String InfoPessoais.getNome());
	//
	// String around() : decimo1(){
	// String s = proceed();
	// String st = "Francisgleydisson";
	// System.out.println("o nome que peguei no banco foi " + s
	// + "mas o nome que vou retornar eh " + st);
	// return st;
	// }
	//
	//
	// // nono
	// after() returning(Object s) : call(Object *.*(String)){
	// System.out
	// .println("pointcut na chamada de: call(* *.*(String)) e o valor eh: "
	// + s.toString());
	// }
	//
	// pointcut sexto2() : call (public String *.Ap.getNome());
	//
	// String around() : sexto2() {
	// String s = proceed();
	// return s.toUpperCase();
	// }

	/*
	 * // decimo primeiro before(InfoPessoais inf, String s) : call(void
	 * setCpf(String)) && target(inf) && args(s) {
	 * System.out.println("Usuario: " + inf.getNome() +
	 * " foi cadastrado no sistema com o cpf:  " + s); }
	 */
	// public void setCpf(String cpf)
	/*
	 * 
	 * pointcut decimoprimeiro(String s, Object r): call(public void
	 * .InfoPessoais.setCpf(String)) && target(r) && args(s);
	 * 
	 * void around(String s): decimoprimeiro(s) { String cp = "000000000";
	 * System.out.println("O cpf recebido no objeto " + r + " foi " + s +
	 * "mas o cpf vai ser  " + cp); proceed(cp); return; } //
	 */
	// decimosegundo
	// captura o objeto que chamou o metodo inserir de InfoPessoais

	// public String search(String mac){
	// public pointcut p1(Network var): call(String *.Network.search(String)) &&
	// this(var);

	/*
	 * String before(Network var): p1(var){ //String s = proceed();
	 * System.out.println(var.toString()); return ""; } //
	 */

}
